import axios from "axios"
import qs from "qs"
import Vue from "vue"

const service = axios.create({
	// withCredentials: true, //允许跨域携带cookie
	async: true,
	crossDomain: true,
	baseURL: 'http://localhost:12138',
	timeout: 6000
})

// request拦截器,在请求之前做一些处理
service.interceptors.request.use(
	config => {
		if (uni.getStorageSync('auth-token')) {
		    // 给请求头添加user-token
		    config.headers["Authorization"] = 'Bearer ' + uni.getStorageSync('auth-token');
		}
		/**
		 * 传值问题:
		 *因为params是添加到url的请求字符串中的，用于get请求。 而data是添加到请求体（body）中的， 用于post请求。
		 *
		 * post的data需要用qs转一下，但后台使用@Requestbody时，不再需要qs转，此时也不能使用params传值 
		 * get的params不需要转
		 */
		return config;
	},
	error => {
		console.log(error); // for debug
		return Promise.reject(error);
	}
);

//配置成功后的拦截器
service.interceptors.response.use(res => {
	// 服务相应正常
	if (res.status == 200) {
		// 尚未登录，21005
		if(res.data.code == 21005){
			uni.showToast({
				title: res.data.message,
				icon: 'none',
			})
			setTimeout(()=>{
				uni.navigateTo({
				  url: '/pages/common/login/login',
				  animationType: 'pop-in',
				  animationDuration: 200
				})
			},1000)
			
		}
		// 登录，不拦截
		return res.data
	} else {
		// 错误提示 (可以更细粒度控制)
		uni.showToast({
			title: '服务器消失了,稍后重试...',
			icon: 'none',
		})
		// return Promise.reject(res);
	}
}, error => {
	// 404  ...处理
	console.log(error)
	// if(error.response.status == 404){
	// 	uni.showToast({
	// 		title: '页面请求访问失败...',
	// 		icon: 'none',
	// 	})
	// }
	return;
})

axios.defaults.adapter = function(config) { //自己定义个适配器，用来适配uniapp的语法
	return new Promise((resolve, reject) => {
		// console.log(config)
		var settle = require('axios/lib/core/settle');
		var buildURL = require('axios/lib/helpers/buildURL');
		uni.request({
			method: config.method.toUpperCase(),
			url: config.baseURL + buildURL(config.url, config.params, config.paramsSerializer),
			header: config.headers,
			data: config.data,
			dataType: config.dataType,
			responseType: config.responseType,
			sslVerify: config.sslVerify,
			complete: function complete(response) {
				response = {
					data: response.data,
					status: response.statusCode,
					errMsg: response.errMsg,
					header: response.header,
					config: config
				};
				settle(resolve, reject, response);
			}
		})
	})
}
export default service